
package kaizen.nomweb;

import java.io.*;

import java.lang.reflect.Method;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import java.text.*;

import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import kaizen.jdbc.*;

// Referenced classes of package kaizen.nomweb:
//            FunInsertEng, templates

public class utilerias extends HttpServlet 
{

  public utilerias()
  {
  }

  public static double aDecimal(String valor)
  {
    double val = 0.0D;
    try
    {
      val = Double.valueOf(valor).doubleValue();
    } catch (NumberFormatException _ex)
    {
      return 0.0D;
    }
    return val;
  }

  public static int aEntero(String valor)
  {
    int val = 0;
    try
    {
      val = Integer.valueOf(valor).intValue();
    } catch (NumberFormatException _ex)
    {
      return 0;
    }
    return val;
  }

  public static double aNumerico(String cadena)
  {
    double num = Double.valueOf(cadena).doubleValue();
    return num;
  }

  public static int aSmallInt(String cadena)
  {
    int num = Integer.valueOf(cadena).intValue();
    return num;
  }

  public static Date agregaDia(String sfecha, int i) throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Calendar cal = new GregorianCalendar();
    Date dfecha = new Date();
    try
    {
      dfecha = frm.parse(sfecha);
    } catch (ParseException _ex)
    {
      return dfecha;
    }
    cal.setTime(dfecha);
    cal.add(5, i);
    dfecha = cal.getTime();
    return dfecha;
  }

  public static void borraContWinDir(String dir)
  {
    try
    {
      Process procesa = Runtime.getRuntime().exec(new String[]
          { "cmd", "/c", "del", dir + "*.*", "/Q" });
      DataInputStream in = 
        new DataInputStream(new BufferedInputStream(procesa.getInputStream()));
      String s;
      while ((s = in.readLine()) != null)
        System.out.println(s);
    } catch (IOException _ex)
    {
      System.out.println("Existio un error al crear el directorio: " + dir);
    }
  }

  public static boolean buscaFechaEnVector(Date dfecha, Vector vFechas, 
                                           int posFecha) throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    if (vFechas.size() == 0)
      return false;
    int cont = 0;
    String sfecha = frm.format(dfecha).toString();
    for (; cont < vFechas.size(); cont++)
    {
      dbRecord ksrecord = (dbRecord)vFechas.elementAt(cont);
      String sfechaComp = ksrecord.getField(posFecha);
      Date dfechaComp = new Date();
      try
      {
        dfechaComp = frm.parse(sfechaComp);
        sfechaComp = frm.format(dfechaComp).toString();
        if (sfecha.startsWith(sfechaComp))
          return true;
      } catch (ParseException _ex)
      {
      }
    }

    return false;
  }

  public static String calcHMS(long timeInMilliSeconds)
  {
    long seconds = timeInMilliSeconds / 1000L;
    long hours = seconds / 3600L;
    seconds -= hours * 3600L;
    long minutes = seconds / 60L;
    String tiempo = hours + ":" + minutes;
    return tiempo;
  }

  public static String ciifWhere(String joinFK, String tipoVal, 
                                 HttpServletRequest req) throws IOException
  {
    String tipo_ciifwhere = "ciifwhere=";
    String tipo_ciifwhereOr = "ciifwhereOr=";
    String sql1 = generaValIzq(tipoVal, joinFK);
    String sql2 = generaValDer(":", joinFK);
    String ciifwhere = generaValDer(tipoVal, joinFK);
    ciifwhere = generaValIzq(":", ciifwhere);
    Vector vValida = generaVectorStr(ciifwhere, "|");
    boolean b_res = true;
    if (tipoVal.trim().equals(tipo_ciifwhere))
    {
      String s_res = FunInsertEng.fn_cIifCad(vValida, req);
      System.out.println(s_res);
      if (s_res.length() > 0)
        b_res = false;
    } else
    {
      b_res = FunInsertEng.fn_cIifCadOr(vValida, req);
    }
    if (b_res)
    {
      joinFK = sql1 + sql2;
    } else
    {
      joinFK = sql1;
    }
    return joinFK;
  }

  static Class _mthclass$(String class$)
  {
    try
    {
      return Class.forName(class$);
    } catch (ClassNotFoundException forName)
    {
      throw new NoClassDefFoundError(forName.getMessage());
    }
  }

  public static String conFechaNombreCampo(String campo) throws IOException
  {
    if (campo == null)
      return "";
    String nom_campo = "";
    Properties propsKaizen = loadProperties("/kaizen/general.properties");
    String mascara = propsKaizen.getProperty("mascaraFechaSelect");
    if (mascara.trim().length() > 0)
      nom_campo = replaceString(mascara, "-campo-", campo);
    else
      nom_campo = campo;
    return nom_campo;
  }

  public static String configuraFechaInsert(String fecha) throws IOException
  {
    if (fecha == null)
      return "NULL";
    String fechaIns = "";
    Properties propsKaizen = loadProperties("/kaizen/general.properties");
    String mascara = propsKaizen.getProperty("mascaraFechaInsert");
    if (mascara.trim().length() > 0)
      fechaIns = replaceString(mascara, "-fecha-", fecha);
    else
      fechaIns = "'" + fecha + "'";
    return fechaIns;
  }

  public static String configuraFechaInsert(String fecha, 
                                            String mascara) throws IOException
  {
    if (fecha == null)
      return "NULL";
    String fechaIns = "";
    if (mascara.trim().length() > 0)
      fechaIns = replaceString(mascara, "-fecha-", fecha);
    else
      fechaIns = "'" + fecha + "'";
    return fechaIns;
  }

  public static String convierteFechaAString(Date fecha) throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    return frm.format(fecha).toString();
  }

  public static String convierteFechaAStringMascara(Date fecha, 
                                                    String mascaraFecha) throws IOException
  {
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    return frm.format(fecha).toString();
  }

  public static String convierteHoras(String horas)
  {
    if (esDecimal(horas))
    {
      double dhoras = aDecimal(horas);
      int dhrsdecimal = aEntero(generaValDer(".", horas));
      dhrsdecimal -= 60;
      String shrsdecimal = String.valueOf(dhrsdecimal);
      if (dhrsdecimal >= 0)
      {
        int dhrsentero = aEntero(generaValIzq(".", horas));
        dhrsentero++;
        if (shrsdecimal.length() == 1)
          shrsdecimal = "0" + shrsdecimal;
        String resultado = dhrsentero + "." + shrsdecimal;
        return resultado;
      } else
      {
        return horas;
      }
    } else
    {
      return "";
    }
  }

  public static Date convierteStringaFecha(String sfecha) throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Date dfecha = new Date();
    try
    {
      dfecha = frm.parse(sfecha);
    } catch (ParseException _ex)
    {
      return null;
    }
    return dfecha;
  }

  public static Date convierteStringaFecha(String sfecha, 
                                           String mascaraFecha) throws IOException
  {
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Date dfecha = new Date();
    try
    {
      dfecha = frm.parse(sfecha);
    } catch (ParseException _ex)
    {
      return null;
    }
    return dfecha;
  }

  public static long convierteStringaFechaLong(String sfecha) throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Date dfecha = new Date();
    try
    {
      dfecha = frm.parse(sfecha);
    } catch (ParseException _ex)
    {
      return 0L;
    }
    return dfecha.getTime();
  }

  public static void creaWinDir(String dir)
  {
    try
    {
      Process procesa = Runtime.getRuntime().exec(new String[]
          { "cmd", "/c", "md", dir });
      DataInputStream in = 
        new DataInputStream(new BufferedInputStream(procesa.getInputStream()));
      String s;
      while ((s = in.readLine()) != null)
        System.out.println(s);
    } catch (IOException _ex)
    {
      System.out.println("Existio un error al crear el directorio: " + dir);
    }
  }

  public String[] createArray(String text, int count, String sep)
  {
    String lsa_options[] = new String[count];
    int li_ind;
    for (li_ind = 0; text.indexOf(sep) != -1; li_ind++)
    {
      lsa_options[li_ind] = text.substring(0, text.indexOf(sep)).trim();
      text = text.substring(text.indexOf(sep) + 1, text.length()).trim();
    }

    if (text.length() > 0)
      lsa_options[li_ind] = text;
    return lsa_options;
  }

  public static String cuentaHoras(String hrEntrada1, String hrSalida1, 
                                   String hrEntrada2, String hrSalida2)
  {
    try
    {
      if (esFechaValida(hrEntrada1) && esFechaValida(hrSalida1))
      {
        if (!esFechaValida(hrEntrada2))
          hrEntrada2 = "0:0";
        if (!esFechaValida(hrSalida2))
          hrSalida2 = "0:0";
      }
      Vector v1 = new Vector();
      v1 = generaVectorStr(hrEntrada1, ":");
      int h1 = (new Integer((String)v1.elementAt(0))).intValue();
      int m1 = (new Integer((String)v1.elementAt(1))).intValue();
      v1 = generaVectorStr(hrSalida1, ":");
      int h2 = (new Integer((String)v1.elementAt(0))).intValue();
      int m2 = (new Integer((String)v1.elementAt(1))).intValue();
      v1 = generaVectorStr(hrEntrada2, ":");
      int h3 = (new Integer((String)v1.elementAt(0))).intValue();
      int m3 = (new Integer((String)v1.elementAt(1))).intValue();
      v1 = generaVectorStr(hrSalida2, ":");
      int h4 = (new Integer((String)v1.elementAt(0))).intValue();
      int m4 = (new Integer((String)v1.elementAt(1))).intValue();
      GregorianCalendar liftOff1 = new GregorianCalendar(0, 0, 0, h1, m1, 0);
      Date d1 = liftOff1.getTime();
      GregorianCalendar liftOff2 = new GregorianCalendar(0, 0, 0, h2, m2, 0);
      Date d2 = liftOff2.getTime();
      GregorianCalendar liftOff3 = new GregorianCalendar(0, 0, 0, h3, m3, 0);
      Date d3 = liftOff3.getTime();
      GregorianCalendar liftOff4 = new GregorianCalendar(0, 0, 0, h4, m4, 0);
      Date d4 = liftOff4.getTime();
      long time1 = d1.getTime();
      long time2 = d2.getTime();
      long diff5 = time2 - time1;
      String s5 = calcHMS(diff5);
      long time3 = d3.getTime();
      long time4 = d4.getTime();
      long diff6 = time4 - time3;
      String s6 = calcHMS(diff6);
      Vector vtiempo = new Vector();
      vtiempo = generaVectorStr(s5, ":");
      int horas1 = (new Integer((String)vtiempo.elementAt(0))).intValue();
      int minutos1 = (new Integer((String)vtiempo.elementAt(1))).intValue();
      vtiempo = generaVectorStr(s6, ":");
      int horas2 = (new Integer((String)vtiempo.elementAt(0))).intValue();
      int minutos2 = (new Integer((String)vtiempo.elementAt(1))).intValue();
      GregorianCalendar gc9 = new GregorianCalendar(0, 0, 0, 0, 0, 0);
      gc9.add(11, horas1);
      gc9.add(12, minutos1);
      gc9.add(11, horas2);
      gc9.add(12, minutos2);
      Date d9 = gc9.getTime();
      return convierteFechaAString(d9);
    } catch (Exception _ex)
    {
      return "";
    }
  }

  public static String cuentaHorasAct(Vector vData, String separador)
  {
    String stotal = "";
    int total = 0;
    int totalDec = 0;
    for (int i = 0; i < vData.size(); i++)
    {
      String shora = (String)vData.elementAt(i);
      shora = shora.trim();
      String sep = separador;
      if (sep.equals(":") && shora.length() > 0)
      {
        shora = replaceString1(shora, ":", ".");
        sep = ".";
      }
      if (shora.length() > 0)
        if (esDecimal(shora))
        {
          if (shora.indexOf(sep) >= 0)
          {
            String sder = generaValDer(sep, shora);
            if (sder.length() > 2)
              return stotal;
            int hrs = aEntero(generaValIzq(sep, shora));
            if (hrs > 24)
              return stotal;
            totalDec += aEntero(sder);
            total += hrs;
          } else
          {
            int hrs = aEntero(shora);
            if (hrs > 24)
              return stotal;
            total += hrs;
          }
        } else
        {
          return stotal;
        }
    }

    if (totalDec >= 60)
    {
      double horas = totalDec / 60;
      String shoras = String.valueOf(horas);
      if (shoras.indexOf(".") >= 0)
      {
        int ihora = aEntero(generaValIzq(".", shoras));
        int multiplo = ihora * 60;
        totalDec -= multiplo;
        total += ihora;
      } else
      {
        int ihora = aEntero(shoras);
        total += ihora;
        totalDec = 0;
      }
    }
    stotal = total + ":" + totalDec;
    return stotal;
  }

  public void doGet(HttpServletRequest req, 
                    HttpServletResponse resp) throws ServletException, 
                                                     IOException
  {
    resp.setContentType("text/html");
    PrintWriter out = new PrintWriter(resp.getOutputStream());
  }

  public static String ejecutaStoreServlet(String nombre_clase, 
                                           HttpServletRequest req)
  {
    String resultado = "";
    try
    {
      if (!DbAppUnivC.setStoreConn())
        return "Error: No se puede establecer la conexi\363n.";
      java.sql.Connection conn = DbAppUnivC.getStoreConn();
      if (conn == null)
        return "Error: La conexi\363n es nula.";
      Class cls = Class.forName(nombre_clase);
      Object objeto = cls.newInstance();
      Method mts[] = objeto.getClass().getDeclaredMethods();
      Method metodo = null;
      for (int i = 0; i < mts.length; i++)
      {
        if (mts[i].toString().indexOf("proceso") < 0)
          continue;
        System.out.println("encontrado metodo" + mts[i]);
        metodo = mts[i];
        break;
      }

      System.out.println("Invocando la clase " + nombre_clase);
      Object returnedObject = metodo.invoke(objeto, new Object[]
          { req, conn });
      String respuesta = ((String)returnedObject).toString();
      return respuesta;
    } catch (Exception ex)
    {
      return "ORA-20501:@Atenci\363n, la clase Java Store Procedure " + 
        nombre_clase + 
        ", no existe o no se encontr\363 algunos de los m\350todos: " + ex + 
        "@";
    }
  }

  public static String encuentraElementos(String clave, Vector vData)
  {
    String sNombre = "";
    if (vData == null)
      return "";
    for (int cont = 0; cont < vData.size(); cont++)
    {
      String datos[] = (String[])vData.elementAt(cont);
      if (datos[0] != null)
      {
        String claveData = datos[0];
        if (clave.trim().equals(claveData))
          return datos[1];
      }
    }

    return sNombre;
  }

  public static String encuentraLiga(String opcion, 
                                     HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String sql = 
      "select op_cveopc, op_url, op_prog_apart from gentop where op_cvesis = '" + 
      sistema + "'";
    Vector vOpciones = DbAppCache.execQuery(sql);
    return encuentraLigaVector(vOpciones, opcion);
  }

  public static String encuentraLigaVector(Vector vRecord, String opcion)
  {
    int a = 0;
    String salida = "";
    for (; a < vRecord.size(); a++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(a);
      String ks_opcion = ksrecord.getField(1);
      String ks_url = ksrecord.getField(2);
      String ks_prog_apart = ksrecord.getField(3);
      if (ks_opcion == null)
        ks_opcion = "";
      if (ks_url == null)
        ks_url = "";
      if (opcion.toUpperCase().trim().equals(ks_opcion.toUpperCase().trim()))
        if (ks_prog_apart != null)
          return ks_prog_apart;
        else
          return ks_url;
    }

    return "";
  }

  public static String encuentraMenuVecorXSubmenu(Vector vRecord, 
                                                  String submenu)
  {
    int a = 0;
    String salida = "";
    for (; a < vRecord.size(); a++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(a);
      String ks_menu = ksrecord.getField(1);
      String ks_submenu = ksrecord.getField(2);
      if (ks_menu == null)
        ks_menu = "";
      if (ks_submenu == null)
        ks_submenu = "";
      if (submenu.trim().equals(ks_submenu.trim()))
        return ks_menu;
    }

    return "";
  }

  public static String encuentraMenuVector(Vector vRecord, String opcion)
  {
    int a = 0;
    String salida = "";
    for (; a < vRecord.size(); a++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(a);
      String ks_opcion = ksrecord.getField(1);
      String ks_url = ksrecord.getField(2);
      if (ks_opcion == null)
        ks_opcion = "";
      if (ks_url == null)
        ks_url = "";
      if (opcion.toLowerCase().trim().equals(ks_url.toLowerCase().trim()))
        return ks_opcion;
    }

    return "";
  }

  public static String encuentraMenuXSubmenu(String submenu, 
                                             HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String sql = 
      "select me_cveopc, me_cveopc_ejec from gentme where me_cvesis = '" + 
      sistema + "' order by me_cveopc_ejec ";
    Vector vOpciones = DbAppCache.execQuery(sql);
    String padre = "";
    String padre_ant = "";
    for (padre = padre_ant = encuentraMenuVecorXSubmenu(vOpciones, submenu); 
         padre.trim().length() > 0 && !padre.equals("m0"); )
    {
      padre = encuentraMenuVecorXSubmenu(vOpciones, padre);
      if (padre.trim().length() > 0 && !padre.equals("m0"))
        padre_ant = padre;
    }

    return padre_ant;
  }

  public static int encuentraPosElementos(String clave, Vector vData)
  {
    if (vData == null)
      return -1;
    for (int cont = 0; cont < vData.size(); cont++)
    {
      String datos[] = (String[])vData.elementAt(cont);
      if (datos[0] != null)
      {
        String claveData = datos[0];
        if (clave.trim().equals(claveData))
          return cont;
      }
    }

    return -1;
  }

  public static boolean encuentraUsuario(Vector vRecord, String usuario, 
                                         String password)
  {
    int a = 0;
    String salida = "";
    if (usuario == null)
      usuario = "";
    if (password == null)
      password = "";
    for (; a < vRecord.size(); a++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(a);
      String ks_usuario = ksrecord.getField(1);
      String ks_password = ksrecord.getField(2);
      if (ks_usuario == null)
        ks_usuario = "";
      if (ks_password == null)
        ks_password = "";
      if (usuario.toLowerCase().trim().equals(ks_usuario.toLowerCase().trim()) && 
          password.toLowerCase().trim().equals(ks_password.toLowerCase().trim()))
        return true;
    }

    return false;
  }

  public static boolean esDecimal(String valor)
  {
    try
    {
      double val = 0.0D;
      val = Double.valueOf(valor).doubleValue();
    } catch (NumberFormatException _ex)
    {
      return false;
    }
    return true;
  }

  public static boolean esDivisionEntera(int dividendo, int divisor)
  {
    try
    {
      int val = 0;
      val = dividendo / divisor;
    } catch (NumberFormatException _ex)
    {
      return false;
    }
    return true;
  }

  public static boolean esEntero(String valor)
  {
    try
    {
      int val = 0;
      val = Integer.valueOf(valor).intValue();
    } catch (NumberFormatException _ex)
    {
      return false;
    }
    return true;
  }

  public static boolean esFechaValida(String sfecha)
  {
    try
    {
      Date fecha = convierteStringaFecha(sfecha);
      SimpleDateFormat frm = new SimpleDateFormat("k:mm");
      frm.format(fecha).toString();
    } catch (Exception _ex)
    {
      return false;
    }
    return true;
  }

  public static boolean existeElementos(String clave, Vector vData)
  {
    if (vData == null)
      return false;
    for (int cont = 0; cont < vData.size(); cont++)
    {
      String datos[] = (String[])vData.elementAt(cont);
      if (datos[0] != null)
      {
        String claveData = datos[0];
        if (clave.trim().equals(claveData))
          return true;
      }
    }

    return false;
  }

  public static String fechaHoy() throws IOException
  {
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    return fechaHoy(mascaraFecha);
  }

  public static String fechaHoy(String mascaraFecha) throws IOException
  {
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Date date = new Date();
    return frm.format(date).toString();
  }

  public static long fechaHoy_long()
  {
    Date date = new Date();
    return date.getTime();
  }

  public static String filtraReg(dbRecord ksrecord, int num)
  {
    String campo = ksrecord.getField(num);
    return validaNulo(campo);
  }

  public static String formateaFechaMascara(String sFecha, 
                                            String mascaraFecha) throws IOException
  {
    Date fecha = convierteStringaFecha(sFecha);
    if (fecha == null)
    {
      return sFecha;
    } else
    {
      SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
      return frm.format(fecha).toString();
    }
  }

  public static String generaError(String err, 
                                   HttpServletRequest req) throws IOException
  {
    String dir_pagInicio = "";
    String pag_error = "";
    try
    {
      String sistema = tomaParametro("dic_sistema", req);
      String nombre_prop = "/kaizen/" + sistema + "Web.properties";
      Properties props = loadProperties(nombre_prop);
      pag_error = props.getProperty("pag_error");
      dir_pagInicio = props.getProperty("dir_pagInicio");
    } catch (Exception _ex)
    {
      pag_error = "";
    }
    if (pag_error.length() == 0)
    {
      return "";
    } else
    {
      String salida = 
        templates.generaPlantilla(dir_pagInicio + pag_error, req);
      salida = replaceString(salida, "<!--datos-->", err);
      return salida;
    }
  }

  public static String generaErrorStore(String error)
  {
    String msg = "";
    if (error.indexOf("ORA-20501") >= 0)
    {
      msg = error;
      if (error.indexOf("@") > 0)
        msg = generaValDer("@", error);
    } else
    {
      msg = "Operaci\363n invalida, consulte la informaci\363n capturada.";
    }
    msg = replaceString(msg, "@", " ");
    msg = replaceString(msg, "ORA-20501", " ");
    if (msg.indexOf("ORA-") > 0)
      msg = generaValIzq("ORA-", msg);
    return msg;
  }

  public static String generaMsg(String msg, 
                                 HttpServletRequest req) throws IOException
  {
    String dir_pagInicio = "";
    String pag_msg = "";
    try
    {
      String sistema = tomaParametro("dic_sistema", req);
      String nombre_prop = "/kaizen/" + sistema + "Web.properties";
      Properties props = loadProperties(nombre_prop);
      pag_msg = props.getProperty("pag_msg");
      dir_pagInicio = props.getProperty("dir_pagInicio");
    } catch (Exception _ex)
    {
      pag_msg = "";
    }
    if (pag_msg.length() == 0)
    {
      return "";
    } else
    {
      String salida = templates.generaPlantilla(dir_pagInicio + pag_msg, req);
      salida = replaceString(salida, "<!--datos-->", msg);
      return salida;
    }
  }

  public static String generaValDer(String cadb, String cadena)
  {
    String s_val = 
      cadena.substring(cadena.toUpperCase().indexOf(cadb.toUpperCase()) + 
                       cadb.length(), cadena.length());
    return s_val;
  }

  public static String generaValDerArr(String cadb, String cadena, 
                                       String[] arr)
  {
    if (cadena.startsWith("-") && cadb.equals("-"))
      cadena = cadena.substring(1);
    String s_val = generaValDer(cadb, cadena);
    int pos = -1;
    for (int i = 0; i < arr.length; i++)
      if (s_val.indexOf(arr[i]) > 0)
      {
        int p = s_val.indexOf(arr[i]);
        if (pos < 0)
          pos = p;
        if (p < pos)
          pos = p;
      }

    if (pos > 0)
      s_val = s_val.substring(0, pos);
    return s_val;
  }

  public static String generaValDerLast(String cadb, String cadena)
  {
    String s_val = 
      cadena.substring(cadena.toUpperCase().lastIndexOf(cadb.toUpperCase()) + 
                       cadb.length(), cadena.length());
    return s_val;
  }

  public static String generaValIzq(String cadb, String cadena)
  {
    String s_val = 
      cadena.substring(0, cadena.toUpperCase().indexOf(cadb.toUpperCase()));
    return s_val;
  }

  public static String generaValIzqArr(String cadb, String cadena, 
                                       String[] arr)
  {
    boolean negativo = false;
    if (cadena.startsWith("-") && cadb.equals("-"))
    {
      negativo = true;
      cadena = cadena.substring(1);
    }
    String s_val = generaValIzq(cadb, cadena);
    int pos = -1;
    for (int i = 0; i < arr.length; i++)
      if (s_val.lastIndexOf(arr[i]) >= 0)
      {
        int p = s_val.lastIndexOf(arr[i]);
        if (pos == -1)
          pos = p;
        if (p > pos)
          pos = p;
      }

    if (pos > 0)
      s_val = s_val.substring(pos + 1);
    if (negativo)
      s_val = "-" + s_val;
    return s_val;
  }

  public static String generaValIzqLast(String cadb, String cadena)
  {
    String s_val = 
      cadena.substring(0, cadena.toUpperCase().lastIndexOf(cadb.toUpperCase()));
    return s_val;
  }

  public static Vector generaVectorStr(String cadena, String sep)
  {
    Vector vStr = new Vector();
    if (cadena == null)
      return vStr;
    cadena = cadena.trim();
    if (cadena.length() == 0)
      return vStr;
    int pos;
    for (; cadena.indexOf(sep) >= 0; 
         cadena = cadena.substring(pos + sep.length(), cadena.length()))
    {
      pos = cadena.indexOf(sep);
      String s_val = cadena.substring(0, pos);
      vStr.addElement(s_val);
    }

    vStr.addElement(cadena);
    return vStr;
  }

  public static Vector generaVectorStr_ksRecord(Vector vRecord)
  {
    Vector vSalida = new Vector();
    if (vRecord.size() == 0)
      return vSalida;
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      int tam = ksrecord.getFieldCount() + 1;
      String arr[] = new String[tam];
      for (int reg = 0; reg < tam; reg++)
        arr[reg] = filtraReg(ksrecord, reg);

      vSalida.addElement(arr);
    }

    return vSalida;
  }

  public static Vector generaVectorStr_ksRecord_Applet(Vector vRecord)
  {
    Vector vSalida = new Vector();
    if (vRecord.size() == 0)
      return vSalida;
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      int tam = ksrecord.getFieldCount() + 1;
      String arr[] = new String[tam];
      for (int reg = 1; reg < tam; reg++)
        arr[reg - 1] = filtraReg(ksrecord, reg);

      vSalida.addElement(arr);
    }

    return vSalida;
  }

  public static HttpServletRequest getRequest(HttpServletRequest req, 
                                              String pos)
  {
    int ipos = Integer.valueOf(pos).intValue();
    HttpServletRequest vReq = (HttpServletRequest)vRequest.elementAt(ipos - 1);
    return vReq;
  }

  public static void insertaBitacora(HttpServletRequest req, String otros)
  {
    HttpSession session = req.getSession(true);
    if (session == null)
      return;
    if (session.getAttribute("dic_sistema") == null)
      return;
    String sistema = session.getAttribute("dic_sistema").toString();
    String nombre_prop = "/kaizen/" + sistema + "Web.properties";
    Properties props = null;
    try
    {
      props = loadProperties(nombre_prop);
    } catch (Exception _ex)
    {
        System.out.println("Hubo problemas cargando propiedades en insertaBitacora");
    }
    String guardaBitacora = props.getProperty("guardaBitacora");
    if (!guardaBitacora.equals("true"))
      return;
    String textoDef = "no especificado";
    String usuario = validaNuloEsp(tomaParametro("usuario", req), textoDef);
    String estado = validaNuloEsp(tomaParametro("dic_estado", req), textoDef);
    String tabla = validaNuloEsp(tomaParametro("dic_tabla", req), textoDef);
    String compania = validaNuloEsp(tomaParametro("compania", req), textoDef);
    String perfil = validaNuloEsp(tomaParametro("dic_grupo", req), textoDef);
    String ip = validaNuloEsp(tomaParametro("dic_dir_ip", req), textoDef);
    String host = validaNuloEsp(tomaParametro("dic_acceso_ip", req), textoDef);
    if (tabla.toLowerCase().trim().equals("dt_bitacora"))
      return;
    if (otros.indexOf("'") >= 0)
      otros = validaComillas(otros);
    String id = null;
    try
    {
      id = valorSqlUni("select max(id)+1 from dt_bitacora");
    } catch (Exception _ex)
    {
        System.out.println("Error al seleccionar en insertaBitacora");
    }
    if (id == null)
      id = "0";
    String sqlI = 
      "insert into dt_bitacora (id, sistema, usuario, estado, tabla, compania,";
    sqlI = sqlI + " perfil, ip, host, sql, hora) ";
    sqlI = 
        sqlI + " values(" + id + " , '" + sistema + "','" + usuario + "', " + 
        estado + ",'" + tabla;
    sqlI = 
        sqlI + "','" + compania + "','" + perfil + "','" + ip + "','" + host + 
        "','";
    sqlI = sqlI + otros + "', sysdate) ";
    try
    {
      DbAppUnivC.execStatement(sqlI);
    } catch (Exception _ex)
    {
        System.out.println("Error al insertar en bd insertaBitacora");
    }
  }

  public static Properties loadProperties(String fileName) throws IOException
  {
    InputStream is = null;
    Properties props = new Properties();
    //is = (java.util.Properties.class).getResourceAsStream(fileName);
    is = (utilerias.class).getClassLoader().getResourceAsStream(fileName);
    props.load(is);
    if (is != null)
      is.close();   
    return props;
  }

  public static int numRegSql(String sql) throws IOException
  {
    String valSql = null;
    Vector vRecord = DbAppUnivC.execQuery(sql);
    return vRecord.size();
  }

  public static String obtieneDescDic(String url, String sistema, 
                                      String idioma) throws IOException
  {
    String sql = " select  mo_nombre from gentop , gentmo where";
    sql = sql + " mo_cvesis     = '" + sistema + "'";
    sql = sql + " and op_url    = '" + url + "'";
    sql = sql + " and mo_cveidi = '" + idioma + "'";
    sql = sql + " and  op_cvesis = mo_cvesis";
    sql = sql + " and op_cveopc = mo_cveopc";
    Vector vRecord = DbAppCache.execQuery(sql);
    if (vRecord.size() > 0)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(0);
      String desc = ksrecord.getField(1);
      return desc;
    } else
    {
      return "";
    }
  }

  public static String obtieneDescDic(String url, 
                                      HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String idioma = tomaParametro("dic_idioma", req);
    return obtieneDescDic(url, sistema, idioma);
  }

  public static Vector obtieneDiccionario(String tabla, String idioma, 
                                          boolean informativo, 
                                          String sistema) throws IOException
  {
    String sqlSelect = 
      "SELECT dicc.BD_tabla, dicc.BD_campo, BD_tipollave, BD_tipocampo, HTML_tipocampo, BD_longitud, ";
    sqlSelect = 
        sqlSelect + "HTML_ancho, SQL_Insert, SQL_Update, SQL_Delete, SQL_Select, SQL_JoinFk, msg.etiqueta, requerido, BD_FK, ";
    sqlSelect = 
        sqlSelect + "selrep, rep_visible, det_requerido, det_rep_visible, valor_inicial, sqrParametro, Muestra_Campo, html_orden, valor_secuencial, encriptado, mayusculas, html_lineas, sql_detalle, camp_busqueda, sql_busqueda, campo_informativo ";
    sqlSelect = 
        sqlSelect + "FROM diccionario dicc, dt_mensajes msg WHERE dicc.BD_tabla = msg.BD_tabla ";
    sqlSelect = 
        sqlSelect + "AND dicc.BD_campo = msg.BD_campo AND msg.idioma = '" + 
        idioma + "' ";
    sqlSelect = sqlSelect + "AND dicc.bd = '" + sistema + "' ";
    sqlSelect = sqlSelect + "AND msg.bd = '" + sistema + "' ";
    sqlSelect = sqlSelect + "AND dicc.BD_tabla = '" + tabla + "' ";
    if (!informativo)
      sqlSelect = sqlSelect + "AND  campo_informativo  = 'n' ";
    sqlSelect = sqlSelect + " ORDER BY dicc.BD_tabla, HTML_orden";
    Vector vSalida = new Vector();
    Vector vRecord = DbAppCache.execQuery(sqlSelect);
    Vector vStr = generaVectorStr_ksRecord(vRecord);
    return vStr;
  }

  public static Vector obtieneDiccionario(String tabla, String idioma, 
                                          boolean informativo, 
                                          HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String nombre_prop = "/kaizen/" + sistema + "Web.properties";
    Properties props = loadProperties(nombre_prop);
    return obtieneDiccionario(tabla, idioma, informativo, sistema);
  }

  public static Vector obtieneDiccionarioCache(String tabla, String idioma, 
                                               boolean informativo, 
                                               String sistema) throws IOException
  {
    String sqlSelect = 
      "SELECT dicc.BD_tabla, dicc.BD_campo, BD_tipollave, BD_tipocampo, HTML_tipocampo, BD_longitud, ";
    sqlSelect = 
        sqlSelect + "HTML_ancho, SQL_Insert, SQL_Update, SQL_Delete, SQL_Select, SQL_JoinFk, msg.etiqueta, requerido, BD_FK, ";
    sqlSelect = 
        sqlSelect + "selrep, rep_visible, det_requerido, det_rep_visible, valor_inicial, sqrParametro, Muestra_Campo, html_orden, valor_secuencial, encriptado, mayusculas, html_lineas, sql_detalle, camp_busqueda, sql_busqueda, campo_informativo ";
    sqlSelect = 
        sqlSelect + "FROM diccionario dicc, dt_mensajes msg WHERE dicc.BD_tabla = msg.BD_tabla ";
    sqlSelect = 
        sqlSelect + "AND dicc.BD_campo = msg.BD_campo AND msg.idioma = '" + 
        idioma + "' ";
    sqlSelect = sqlSelect + "AND dicc.bd = '" + sistema + "' ";
    sqlSelect = sqlSelect + "AND msg.bd = '" + sistema + "' ";
    if (!informativo)
      sqlSelect = sqlSelect + "AND  campo_informativo  = 'n' ";
    sqlSelect = sqlSelect + " ORDER BY dicc.BD_tabla, HTML_orden";
    Vector vSalida = new Vector();
    Vector vRecord = DbAppCache.execQuery(sqlSelect);
    int col = 1;
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      String cad = ksrecord.getField(col);
      if (cad != null && 
          tabla.trim().toUpperCase().equals(cad.trim().toUpperCase()))
        vSalida.addElement(vRecord.elementAt(i));
    }

    Vector vStr = generaVectorStr_ksRecord(vSalida);
    return vStr;
  }

  public static int obtienePosDatos(Vector vData, int col, String clave)
  {
    int cont = 0;
    clave = clave.trim();
    for (; cont < vData.size(); cont++)
    {
      String sDatos[] = (String[])vData.elementAt(cont);
      String compara = sDatos[col];
      if (compara != null)
        compara = compara.trim();
      else
        compara = "";
      if (clave.toUpperCase().equals(compara.toUpperCase()))
      {
        System.out.println("Encontre en obtienePosDatos  " + compara + 
                           " contra: " + clave);
        return cont;
      }
    }

    return -1;
  }

  public static String obtienePosTabLim(Vector vData, String simporte, int col)
  {
    int cont = 0;
    double importe = aDecimal(simporte);
    for (; cont < vData.size(); cont++)
    {
      String sDatos[] = (String[])vData.elementAt(cont);
      double li = aDecimal(sDatos[1]);
      double ls = aDecimal(sDatos[2]);
      System.out.println(li + " , " + ls + " importe: " + importe);
      if (importe >= li && importe <= ls)
        return sDatos[col];
    }

    return "0";
  }

  public static Vector obtieneTabla(String tabla, 
                                    String sistema) throws IOException
  {
    return obtieneTablaCache(tabla, sistema);
  }

  public static Vector obtieneTabla(String tabla, 
                                    HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    return obtieneTabla(tabla, sistema);
  }

  public static Vector obtieneTablaCache(String tabla, 
                                         String sistema) throws IOException
  {
    String sqlSelect = 
      "select bd_tabla, reporte, proceso, sel_rep, grid_maestro, ";
    sqlSelect = 
        sqlSelect + "grid_detalle, tabla_detalle, sql_tabla_detalle, sqrSalida, mascaraParametro, proc_sql_alta, proc_sql_baja, proc_sql_mod, proc_sql_consulta, forma, sql_reporte, iconos_adicionales, url_proceso ";
    sqlSelect = sqlSelect + "from dt_tablas  where bd = '" + sistema + "'";
    Vector vSalida = new Vector();
    Vector vRecord = DbAppCache.execQuery(sqlSelect);
    int col = 1;
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      String cad = ksrecord.getField(col);
      if (cad != null && 
          tabla.trim().toUpperCase().equals(cad.trim().toUpperCase()))
      {
        vSalida.addElement(vRecord.elementAt(i));
        i = vRecord.size();
      }
    }

    return vSalida;
  }

  public static Vector obtieneTabla_Est(String tabla, 
                                        HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    return obtieneTabla_EstCache(tabla, sistema);
  }

  public static Vector obtieneTabla_EstCache(String tabla, 
                                             String sistema) throws IOException
  {
    String sqlSelect = "select bd_tabla, reporte, proceso, forma ";
    sqlSelect = sqlSelect + "from dt_tablas  where bd = '" + sistema + "'";
    Vector vSalida = new Vector();
    Vector vRecord = DbAppCache.execQuery(sqlSelect);
    int col = 1;
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      String cad = ksrecord.getField(col);
      if (cad != null && 
          tabla.trim().toUpperCase().equals(cad.trim().toUpperCase()))
      {
        vSalida.addElement(vRecord.elementAt(i));
        i = vRecord.size();
      }
    }

    return vSalida;
  }

  public static int queDiaEs(Date dfecha)
  {
    Calendar cal = new GregorianCalendar();
    cal.setTime(dfecha);
    int dia = cal.get(7);
    return dia;
  }

  public static String quitaEnters(String texto)
  {
    char c_enter = '\n';
    texto = validaNulo(texto);
    return replaceString(texto, String.valueOf(c_enter), " ");
  }

  public static String redondea(String valor)
  {
    if (valor == null)
      valor = "";
    String salida = "";
    Locale locales[] =
    { new Locale("fr", "FR"), new Locale("de", "DE"), new Locale("en", "US") };
    if (valor.trim().length() > 0)
      try
      {
        NumberFormat currencyFormatter = 
          NumberFormat.getCurrencyInstance(locales[2]);
        double dcant = Double.valueOf(valor).doubleValue();
        Double d_cantidad = Double.valueOf(Double.toString(dcant));
        salida = currencyFormatter.format(d_cantidad);
        if (salida.startsWith("(") && salida.length() > 3)
        {
          salida = 
              salida.substring(1, 1) + salida.substring(2, salida.length() - 
                                                        1);
          salida = "-" + salida;
        } else
        {
          salida = salida.substring(1);
        }
        salida = salida;
      } catch (NumberFormatException _ex)
      {
        salida = valor;
      }
    return salida;
  }

  public static dbRecord registroSqlUni(String sql) throws IOException
  {
    Vector vRecord = DbAppUnivC.execQuery(sql);
    if (vRecord.size() == 0)
    {
      return null;
    } else
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(0);
      return ksrecord;
    }
  }

  public static dbRecord registroSqlUni(String sql, String ls_driver, 
                                        String ls_url, String ls_user, 
                                        String ls_password) throws IOException
  {
    Vector vRecord = 
      DbAppUnivC.execQuery(sql, ls_driver, ls_url, ls_user, ls_password);
    if (vRecord.size() == 0)
    {
      return null;
    } else
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(0);
      return ksrecord;
    }
  }

  public static String regresaDia(int i_dia)
  {
    String dia = "";
    if (i_dia == 1)
      dia = "d";
    if (i_dia == 2)
      dia = "l";
    if (i_dia == 3)
      dia = "m";
    if (i_dia == 4)
      dia = "i";
    if (i_dia == 5)
      dia = "j";
    if (i_dia == 6)
      dia = "v";
    if (i_dia == 7)
      dia = "s";
    return dia;
  }

  public static String replaceString(String fuente, String cadenab, 
                                     String cadenar)
  {
    String salida = "";
    int pos = fuente.indexOf(cadenab);
    if (pos >= 0)
    {
      salida = fuente.substring(0, pos) + cadenar;
      salida = 
          salida + fuente.substring(pos + cadenab.length(), fuente.length());
    } else
    {
      salida = fuente;
    }
    if (salida.indexOf(cadenab) >= 0)
      salida = replaceString(salida, cadenab, cadenar);
    return salida;
  }

  public static String replaceString1(String fuente, String cadenab, 
                                      String cadenar)
  {
    String salida = "";
    int pos = fuente.indexOf(cadenab);
    if (pos >= 0)
    {
      salida = fuente.substring(0, pos) + cadenar;
      salida = 
          salida + fuente.substring(pos + cadenab.length(), fuente.length());
    } else
    {
      salida = fuente;
    }
    return salida;
  }

  public static String replaceStringOnLine(String fuente, String cadenab, 
                                           String cadenar)
  {
    if (fuente == null)
      return "";
    String salida = fuente;
    for (int pos = salida.indexOf(cadenab); pos >= 0; )
    {
      salida = fuente.substring(0, pos) + cadenar;
      salida = 
          salida + fuente.substring(pos + cadenab.length(), fuente.length());
      fuente = salida;
      int tam = fuente.length();
      int pos2 = pos + cadenar.length();
      if (pos2 <= tam)
        pos = fuente.indexOf(cadenab, pos2);
      else
        pos = -1;
    }

    return salida;
  }

  public static int resta2Fechas_a_Anios(String s_fecha_Actual, 
                                         String s_fecha_Antigua) throws IOException
  {
    double anios = 0.0D;
    Properties props = loadProperties("/kaizen/general.properties");
    String mascaraFecha = props.getProperty("mascaraFecha");
    SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
    Date d_fecha3 = new Date();
    Date d_fecha1;
    Date d_fecha2;
    try
    {
      d_fecha1 = frm.parse(s_fecha_Actual);
      d_fecha2 = frm.parse(s_fecha_Antigua);
    } catch (ParseException _ex)
    {
      return 0;
    }
    anios = (double)(d_fecha1.getTime() - d_fecha2.getTime()) / 86400000D;
    anios /= 365D;
    int i_anios = 0;
    String s_anios = String.valueOf(anios);
    if (s_anios.indexOf(".") > 0)
      s_anios = s_anios.substring(0, s_anios.indexOf("."));
    if (s_anios.trim().length() > 0)
      i_anios = Integer.valueOf(s_anios).intValue();
    return i_anios;
  }

  public static int setRequest(HttpServletRequest req)
  {
    if (vRequest == null)
      vRequest = new Vector();
    vRequest.addElement(req);
    return vRequest.size();
  }

  public static boolean sonLetras(String cad)
  {
    cad = cad.trim().toUpperCase();
    char c[] = cad.toCharArray();
    for (int i = 0; i < cad.length(); i++)
      if (String.valueOf(c[i]).hashCode() < 65 || 
          String.valueOf(c[i]).hashCode() > 90)
        return false;

    return true;
  }

  public static String sustituyeEspaciosLink(String cadena)
  {
    cadena = replaceString(cadena, "  ", " ");
    cadena = replaceString(cadena, " ", "+");
    return cadena;
  }

  public static boolean tieneMenosdeDosDecimales(String sNum, String sep)
  {
    if (sep.length() > 0)
      sNum = replaceString1(sNum, sep, ".");
    if (!esDecimal(sNum))
      return false;
    if (sNum.indexOf(".") >= 0)
    {
      String sDecimales = generaValDer(".", sNum);
      if (sDecimales.trim().length() > 2)
        return false;
    }
    return true;
  }

  public static boolean tieneValorReg(String campo)
  {
    boolean valido = false;
    if (campo.length() > 0)
      valido = true;
    return valido;
  }

  public static boolean tieneValorReg(dbRecord ksrecord, int num)
  {
    boolean valido = false;
    String campo = filtraReg(ksrecord, num);
    if (campo.length() > 0)
      valido = true;
    return valido;
  }

  public static String tomaClaveVector(int indice, Vector vData)
  {
    String arr_lista[] = (String[])vData.elementAt(indice);
    return arr_lista[0].trim();
  }

  public static String tomaCompania(String usuario, 
                                    HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String sql = 
      "select uc_compania  from gentuc where uc_usuario = '" + usuario.trim() + 
      "' and uc_cvesis = '" + sistema + "'";
    String cia = valorSqlCache(sql);
    return cia;
  }

  public static Vector tomaEsquema(ResultSetMetaData meta) throws SQLException
  {
    Vector vData = new Vector();
    if (meta == null)
    {
      System.out.println("NO HAY DATOS EN ResultSetMetaData");
      return vData;
    }
    int columns = meta.getColumnCount();
    int numbers = 0;
    for (int i = 1; i <= columns; i++)
    {
      String data[] = new String[3];
      String column = meta.getColumnLabel(i);
      String type = meta.getColumnTypeName(i);
      String table = meta.getTableName(i);
      data[0] = column;
      data[1] = type;
      data[2] = table;
      vData.addElement(data);
    }

    return vData;
  }

  public static String tomaGrupo(String usuario, 
                                 HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String sql = 
      "select us_grupo  from gentus where us_usuario = '" + usuario.trim() + 
      "' and us_cvesis = '" + sistema + "'";
    String gpo = valorSqlUni(sql);
    return gpo;
  }

  public static String tomaParametro(String nombre, HttpServletRequest req)
  {
    String parametro = req.getParameter(nombre);
    if (parametro == null)
    {
      HttpSession session = req.getSession(true);
      if (session == null)
        return "";
      if (session.getAttribute(nombre) != null)
        parametro = session.getAttribute(nombre).toString();
    }
    return parametro;
  }

  public static String tomaParametroSesion(String nombre, 
                                           HttpServletRequest req_param)
  {
    HttpSession session = req_param.getSession(true);
    String parametro = null;
    if (session.getAttribute(nombre) != null)
      parametro = session.getAttribute(nombre).toString();
    return parametro;
  }

  public static String tomaProp(String s_prop, Properties props)
  {
    if (props == null)
    {
      return "";
    } else
    {
      String res = props.getProperty(s_prop);
      return res;
    }
  }

  public static String tomaValorLinea(String linea, String id, String sep)
  {
    String res = "";
    if (linea.indexOf(id) >= 0)
    {
      res = generaValDer(id, linea);
      if (res.indexOf(sep) >= 0)
        res = generaValIzq(sep, res);
    }
    return res;
  }

  public static Vector uneVectores(Vector v1, Vector v2)
  {
    for (int i = 0; i < v2.size(); i++)
      v1.addElement(v2.elementAt(i));

    return v1;
  }

  public static String validaComillas(String fuente)
  {
    if (fuente == null)
      return "";
    String salida = fuente;
    String cadenab = "'";
    String cadenar = "''";
    for (int pos = salida.indexOf(cadenab); pos >= 0; )
    {
      salida = fuente.substring(0, pos) + cadenar;
      salida = 
          salida + fuente.substring(pos + cadenab.length(), fuente.length());
      fuente = salida;
      int tam = fuente.length();
      int pos2 = pos + 2;
      if (pos2 <= tam)
        pos = fuente.indexOf(cadenab, pos2);
      else
        pos = -1;
    }

    return salida;
  }

  public static String validaComillasSeguidas(String sSql) throws IOException
  {
    String salida = sSql;
    Properties prop = new Properties();
    prop = loadProperties("/kaizen/general.properties");
    String funcionNull = prop.getProperty("funcionNull");
    String cadW = "WHERE";
    if (funcionNull.trim().length() > 0 && 
        (sSql.toUpperCase().indexOf("SELECT") == 0 || 
         sSql.toUpperCase().indexOf("DELETE") == 0 || 
         sSql.toUpperCase().indexOf("UPDATE") == 0) && 
        sSql.toUpperCase().lastIndexOf(cadW) > 0)
    {
      int pos = sSql.toUpperCase().lastIndexOf(cadW);
      String s1 = sSql.substring(0, pos) + cadW;
      String s2 = sSql.substring(pos + cadW.length(), sSql.length());
      s2 = replaceString(s2, "=''", funcionNull);
      s2 = replaceString(s2, "= ''", funcionNull);
      salida = s1 + s2;
    }
    return salida;
  }

  public static String validaJoinFk(String joinFK, 
                                    HttpServletRequest req) throws IOException
  {
    if (joinFK == null)
      return joinFK;
    String res_cond = "";
    String tipo_ciifwhere = "ciifwhere=";
    String tipo_ciifwhereOr = "ciifwhereOr=";
    int i_where = joinFK.indexOf(tipo_ciifwhere);
    for (int i_whereOr = joinFK.indexOf(tipo_ciifwhereOr); 
         i_where >= 0 || i_whereOr >= 0; 
         i_whereOr = joinFK.indexOf(tipo_ciifwhereOr))
    {
      String tipo = tipo_ciifwhere;
      if (i_whereOr > i_where)
        tipo = tipo_ciifwhereOr;
      String condicion = tipo + generaValDerLast(tipo, joinFK);
      joinFK = generaValIzqLast(tipo, joinFK);
      String res_ciif = ciifWhere(condicion, tipo, req);
      if (res_cond.length() > 0 && res_ciif.length() > 0 && 
          !res_ciif.trim().toUpperCase().startsWith("UNION") && 
          (res_cond.toUpperCase().indexOf("WHERE") > 0 || 
           res_cond.trim().length() > 0))
        res_cond = res_cond + " and ";
      res_cond = res_cond + " " + res_ciif;
      i_where = joinFK.indexOf(tipo_ciifwhere);
    }

    res_cond = res_cond.trim();
    if (res_cond.trim().length() > 0)
    {
      String where = " WHERE ";
      if (joinFK.toUpperCase().indexOf("WHERE") > 0)
        if (res_cond.toUpperCase().startsWith("AND ") || 
            res_cond.toUpperCase().startsWith("OR ") || 
            res_cond.toUpperCase().startsWith("UNION ") || 
            res_cond.toUpperCase().startsWith("WHERE ") || 
            joinFK.trim().toUpperCase().endsWith(" AND") || 
            joinFK.trim().toUpperCase().endsWith(" OR") || 
            joinFK.trim().toUpperCase().endsWith(" UNION") || 
            joinFK.trim().toUpperCase().endsWith(" WHERE"))
          where = " ";
        else
          where = " AND ";
      joinFK = joinFK + where + res_cond;
    }
    return joinFK;
  }

  public static String validaNulo(String texto)
  {
    if (texto == null)
      return "";
    else
      return texto.trim();
  }

  public static String validaNuloEsp(String texto, String txtDef)
  {
    if (texto == null)
      return txtDef;
    else
      return texto.trim();
  }

  public static String validaPermisos(String usuario, String tabla, 
                                      String idioma, 
                                      HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String grupo = tomaParametro("dic_grupo", req);
    String permisos = "";
    String sql = 
      "select op_cveopc, op_url from gentop where op_cvesis = '" + sistema + 
      "'";
    Vector consul = DbAppCache.execQuery(sql);
    String menu = encuentraMenuVector(consul, tabla);
    sql = 
        "select pe_permisos from gentpe where pe_cvesis = '" + sistema + "' and pe_cveopc = '" + 
        menu + "' and pe_gpousu = '" + grupo + "'";
    permisos = valorSqlUni(sql);
    if (permisos == null)
      permisos = "";
    return permisos;
  }

  public static String validaPermisosNuevo(HttpServletRequest req) throws IOException
  {
    String sistema = tomaParametro("dic_sistema", req);
    String grupo = tomaParametro("dic_grupo", req);
    String submenu = tomaParametro("dic_submenu", req);
    String permisos = "";
    String sql = 
      "select pe_permisos  from gentop, gentpe  where OP_CVEOPC = PE_CVEOPC  and OP_CVESIS = PE_CVESIS  and PE_CVESIS = '" + 
      sistema + "' " + " and PE_GPOUSU = '" + grupo + "' " + 
      " and OP_CVEOPC = '" + submenu + "'";
    permisos = valorSqlUni(sql);
    if (permisos == null)
      permisos = "";
    return permisos;
  }

  public static boolean validaUsuario(String usuario, String password, 
                                      HttpServletRequest req) throws IOException
  {
    boolean valida = true;
    String sistema = tomaParametro("dic_sistema", req);
    String sql = 
      "SELECT us_usuario, us_passwd FROM gentus where us_cvesis = '" + 
      sistema + "' and us_usuario = '" + usuario + "' and us_passwd = '" + 
      password + "'";
    String ks_usr = valorSqlUni(sql);
    if (ks_usr == null)
      valida = false;
    return valida;
  }

  public static String valorSqlCache(String sql) throws IOException
  {
    String valSql = null;
    Vector vRecord = DbAppCache.execQuery(sql);
    if (vRecord.size() == 0)
      return null;
    dbRecord ksrecord = (dbRecord)vRecord.elementAt(0);
    valSql = ksrecord.getField(1);
    if (valSql != null && valSql.trim().length() == 0)
      valSql = null;
    return valSql;
  }

  public static String valorSqlUni(String sql) throws IOException
  {
    String valSql = null;
    Vector vRecord = DbAppUnivC.execQuery(sql);
    if (vRecord.size() == 0)
      return null;
    dbRecord ksrecord = (dbRecord)vRecord.elementAt(0);
    valSql = ksrecord.getField(1);
    if (valSql != null)
    {
      valSql = valSql.trim();
      if (valSql.length() == 0)
        valSql = null;
    }
    return valSql;
  }

  public static String valoresXComaSqlUni(String sql) throws IOException
  {
    String valoresSql = "";
    Vector vRecord = DbAppUnivC.execQuery(sql);
    if (vRecord.size() == 0)
      return "";
    for (int i = 0; i < vRecord.size(); i++)
    {
      dbRecord ksrecord = (dbRecord)vRecord.elementAt(i);
      String val = ksrecord.getField(1);
      if (val == null)
        val = "";
      if (val.length() > 0)
      {
        if (valoresSql.length() > 0)
          valoresSql = valoresSql + ",";
        valoresSql = valoresSql + val;
      }
    }

    return valoresSql;
  }

  public static boolean variableEnSesion(String nombre, 
                                         HttpServletRequest req_param)
  {
    boolean enSesion = false;
    HttpSession session = req_param.getSession(true);
    if (session.getAttribute(nombre) != null)
      enSesion = true;
    else
      enSesion = false;
    return enSesion;
  }

  public static int DIC_BD_TABLA = 1;
  public static int DIC_BD_CAMPO = 2;
  public static int DIC_BD_TIPOLLAVE = 3;
  public static int DIC_BD_TIPOCAMPO = 4;
  public static int DIC_HTML_TIPOCAMPO = 5;
  public static int DIC_BD_LONGITUD = 6;
  public static int DIC_HTML_ANCHO = 7;
  public static int DIC_SQL_INSERT = 8;
  public static int DIC_SQL_UPDATE = 9;
  public static int DIC_SQL_DELETE = 10;
  public static int DIC_SQL_SELECT = 11;
  public static int DIC_SQL_JOINFK = 12;
  public static int DIC_ETIQUETA = 13;
  public static int DIC_REQUERIDO = 14;
  public static int DIC_BD_FK = 15;
  public static int DIC_SELREP = 16;
  public static int DIC_REP_VISIBLE = 17;
  public static int DIC_DET_REQUERIDO = 18;
  public static int DIC_DET_REP_VISIBLE = 19;
  public static int DIC_VALOR_INICIAL = 20;
  public static int DIC_SQRPARAMETRO = 21;
  public static int DIC_MUESTRA_CAMPO = 22;
  public static int DIC_HTML_ORDEN = 23;
  public static int DIC_VALOR_SECUENCIAL = 24;
  public static int DIC_ENCRIPTADO = 25;
  public static int DIC_MAYUSCULAS = 26;
  public static int DIC_HTML_LINEAS = 27;
  public static int DIC_SQL_DETALLE = 28;
  public static int DIC_CAMP_BUSQUEDA = 29;
  public static int DIC_SQL_BUSQUEDA = 30;
  public static int DIC_CAMPO_INFORMATIVO = 31;
  public static Vector vRequest = null;

}
